package com.yunke.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunke.entity.YunkeContactApply;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 联系方式申请Mapper接口
 * 
 * @author yunke
 * @since 1.0.0
 */
@Mapper
public interface YunkeContactApplyMapper extends BaseMapper<YunkeContactApply> {

    /**
     * 分页查询申请列表
     */
    IPage<YunkeContactApply> selectApplyPage(Page<YunkeContactApply> page,
                                            @Param("applyUserId") Long applyUserId,
                                            @Param("targetUserId") Long targetUserId,
                                            @Param("applyStatus") Integer applyStatus);

    /**
     * 查询未读申请数量
     */
    long countUnreadApplies(@Param("userId") Long userId);

    /**
     * 标记为已读
     */
    int markAsRead(@Param("id") Long id);

    /**
     * 标记全部为已读
     */
    int markAllAsRead(@Param("userId") Long userId);

    /**
     * 更新申请状态
     */
    int updateApplyStatus(@Param("id") Long id,
                         @Param("applyStatus") Integer applyStatus,
                         @Param("handleTime") Long handleTime,
                         @Param("rejectReason") String rejectReason);

    /**
     * 查询过期申请
     */
    List<YunkeContactApply> selectExpiredApplies();

    /**
     * 获取申请统计
     */
    List<Map<String, Object>> getApplyStatistics();

    /**
     * 检查是否已存在申请
     */
    YunkeContactApply selectExistingApply(@Param("applyUserId") Long applyUserId,
                                         @Param("targetUserId") Long targetUserId,
                                         @Param("applyType") Integer applyType);

    /**
     * 获取用户申请统计
     */
    Map<String, Object> getUserApplyStatistics(@Param("userId") Long userId);

    /**
     * 更新联系方式信息
     */
    int updateContactInfo(@Param("id") Long id,
                         @Param("contactInfo") String contactInfo);

    /**
     * 查询今日申请数量
     */
    long countTodayApplies(@Param("applyUserId") Long applyUserId);

    /**
     * 批量更新过期申请状态
     */
    int batchUpdateExpiredApplies(@Param("ids") List<Long> ids);
} 